// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef MEDIA_FORMATS_WEBM_WEBM_WEBVTT_PARSER_H_
#define MEDIA_FORMATS_WEBM_WEBM_WEBVTT_PARSER_H_

#include <stdint.h>

#include <string>

#include "base/macros.h"
#include "media/base/media_export.h"

namespace media {

class MEDIA_EXPORT WebMWebVTTParser {
public:
    // Utility function to parse the WebVTT cue from a byte stream.
    static void Parse(const uint8_t* payload,
        int payload_size,
        std::string* id,
        std::string* settings,
        std::string* content);

private:
    // The payload is the embedded WebVTT cue, stored in a WebM block.
    // The parser treats this as a UTF-8 byte stream.
    WebMWebVTTParser(const uint8_t* payload, int payload_size);

    // Parse the cue identifier, settings, and content from the stream.
    void Parse(std::string* id, std::string* settings, std::string* content);
    // Remove a byte from the stream, advancing the stream pointer.
    // Returns true if a character was returned; false means "end of stream".
    bool GetByte(uint8_t* byte);

    // Backup the stream pointer.
    void UngetByte();

    // Parse a line of text from the stream.
    void ParseLine(std::string* line);

    // Represents the portion of the stream that has not been consumed yet.
    const uint8_t* ptr_;
    const uint8_t* const ptr_end_;

    DISALLOW_COPY_AND_ASSIGN(WebMWebVTTParser);
};

} // namespace media

#endif // MEDIA_FORMATS_WEBM_WEBM_WEBVTT_PARSER_H_
